<?php

namespace app\index\controller;

use think\Controller;
use app\index\model\Image;
use app\common\NormalException;

class Index extends Controller
{
    /**
     * 渲染页面
     */
    public function index()
    {
        return $this->fetch();
    }

    /**
     * 图像风格迁移
     */
    public function postImage()
    {
        // 获取传入的参数
        $req = request()->param();
        if (!isset($req['image']) || !isset($req['style'])) {
            error('参数不全');
        }
        // 生成随机码
        $code = md5(uniqid());
        // 生成上传的原图片
        $image = $req['image'];
        if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $image, $result)) {
            // 匹配出图片的格式
            $type = $result[2];
            $file = 'input/' . $code . ".{$type}";
            if (file_put_contents($file, base64_decode(str_replace($result[1], '', $image)))) {
                // 成功生成图片
            } else {
                error('生成图片失败，疑似无法写入指定文件');
            }
        } else {
            error('生成图片失败，疑似base64编码不合法');
        }
        // 存入数据库
        $mi = new Image();
        $mi->image_code = $code;
        $mi->image_style = $req['style'];
        $mi->image_type = $type;
        $mi->image_status = Image::$STATUS_GENERATING;
        $mi->save();
        return success(['code' => $code]);
    }

    /**
     * 获取风格图像
     */
    public function getImage()
    {
        // 获取传入的参数
        $req = request()->param();
        if (!isset($req['code'])) {
            error('参数不全');
        }
        // 查询数据库
        $query = new Image();
        $mi = $query->where('image_code', $req['code'])->find();
        if (!$mi) {
            error('原图像不存在');
        } else if ($mi->image_status == Image::$STATUS_GENERATING) {
            error('图像尚未成功完成风格迁移');
        } else {
            // 文件路径
            $file = 'output/' . $mi->image_code . '.' . $mi->image_type;
            if (!file_exists($file)) {
                error('生成图像不存在');
            } else {
                $imageFile = fopen($file, 'r');
                if ($imageFile) {
                    $filesize = filesize($file);
                    $content = fread($imageFile, $filesize);
                    // 生成base64编码
                    $imageContent = chunk_split(base64_encode($content));
                }
                fclose($imageFile);
            }
        }
        return success(['image' => $imageContent]);
    }

    public function miss()
    {
        error('Sorry, but the resource you are requesting for is not existed!');
    }
}
